#include <io.h> требуется только для объявления функций
int dup(handle); создает второй handle-р для открытого файла
int handle; handle-р, ссылающийся на открытый файл
int dup2(handle1, handle2); форсирует handle1 для ссылки на handle2 файла
int handle1; handle-р, ссылающийся на открытый файл
int handle2; любое значение handle
Описание.
Функции dup и dup2 вызывают второй handle -р файла, связанный с открытым файлом. Операции в файле могут пересылаться handle -ром, тогда как все handl e-ры, связанные с заданным файлом, используют тот же самый указатель на файл. Создание нового handle не влияет на тип доступа файла.
Функция dup возвращает следующий доступный handle -р для заданного файла. Функция dup2 форсирует (force ) заданный handle , т.е. handle2 , чтобы сослаться на тот же самый файл, на который ссылается handle1 . Если во время вызова handle2 связан с открытымфайлом, то этот файл закрывается.
Возвращаемое значение.
Функция dup возвращает новый handle -р файла. Функция dup2 возвращает 0 в случае успеха. Если возникает ошибка, обе функции возвращают -1 и errno устанавливается в одно из следующих значений.
ВЕЛИЧИНА СМЫСЛОВОЕ ЗНАЧЕНИЕ EBADF Неверный handle-р файла EMFILE Другие handle-ры файла для него не доступны, т.к. много открытых файлов
Пример:
#include <io.h>
#include <stdlib.h>
int fh;
.
.
.
/* выбирает другой handle-р файла, чтобы сослаться на тот
же самый файл, на который указывает handle1 (stdout) */
fh = dup(1);
if (fh == -1)
perror("dup(1) failure");
/* создает handle3 файла для ссылки на тот же самый файл,
на который ссылается handle 1 (stdout). Если handle3 файла явля-
ется также открытым, он закрывается первым */
fh = dup2(1,3);
if (fh != 0)
perror("dup2(1,3) failure");.